#!/bin/sh
###############################################################################
#                                                                             #
# IPFire.org - A linux based firewall                                         #
# Copyright (C) 2007-2022  IPFire Team  <info@ipfire.org>                     #
#                                                                             #
# This program is free software: you can redistribute it and/or modify        #
# it under the terms of the GNU General Public License as published by        #
# the Free Software Foundation, either version 3 of the License, or           #
# (at your option) any later version.                                         #
#                                                                             #
# This program is distributed in the hope that it will be useful,             #
# but WITHOUT ANY WARRANTY; without even the implied warranty of              #
# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the               #
# GNU General Public License for more details.                                #
#                                                                             #
# You should have received a copy of the GNU General Public License           #
# along with this program.  If not, see <http://www.gnu.org/licenses/>.       #
#                                                                             #
###############################################################################

. /etc/sysconfig/rc
. ${rc_functions}

# Function to create files/directory on boot.
create_files() {
	# Read in the configuration file.
	exec 9>&0 < /etc/sysconfig/createfiles
		while read name type perm usr grp dtype maj min junk
		do

			# Ignore comments and blank lines.
       			case "${name}" in
				""|\#*) continue ;;
			esac

			# Ignore existing files.
			if [ ! -e "${name}" ]; then
				# Create stuff based on its type.
				case "${type}" in
					dir)
						mkdir "${name}"
						;;
					file)
						:> "${name}"
						;;
					dev)
						case "${dtype}" in
							char)
								mknod "${name}" c ${maj} ${min}
								;;
							block)
								mknod "${name}" b ${maj} ${min}
								;;
							pipe)
								mknod "${name}" p
								;;
							*) 
								boot_mesg -n "\nUnknown device type: ${dtype}" ${WARNING}
								boot_mesg "" ${NORMAL}
								;;
						esac
						;;
					*)
						boot_mesg -n "\nUnknown type: ${type}" ${WARNING}
						boot_mesg "" ${NORMAL}
						continue
						;;
				esac

				# Set up the permissions, too.
				chown ${usr}:${grp} "${name}"
				chmod ${perm} "${name}"
			fi
		done
	exec 0>&9 9>&-
}

case "${1}" in
	start)
		if [[ ! -L "/var/run" ]]; then
			boot_mesg "Repair /var/run symlink to /run..."
			mv -u /var/run/* /run/ 2>&1 > /dev/null
			rm -rf /var/run
			ln -s ../run /var/run
		fi
		#
		# create some folders
		#
		if [ ! -e /var/lock/subsys ]; then
			mkdir -p /var/lock/subsys
		fi
		if [ ! -e /var/lock/time ]; then
			mkdir -p /var/lock/time
			chown nobody:root /var/lock/time
		fi
		if [ ! -e /var/run/clamav ]; then
			mkdir -p /var/run/clamav
			chown clamav:clamav /var/run/clamav
		fi
		if [ ! -e /var/run/cups ]; then
			mkdir -p /var/run/cups
		fi
		if [ ! -e /var/run/dbus ]; then
			mkdir -p /var/run/dbus
		fi
		if [ ! -e /var/run/saslauthd ]; then
			mkdir -p /var/run/saslauthd
		fi
		if [ ! -e /var/log/vnstat ]; then
			mkdir -p /var/log/vnstat
		fi
		boot_mesg -n "Cleaning file systems:" ${INFO}

		boot_mesg -n " /tmp" ${NORMAL}
		cd /tmp &&
		find . -xdev -mindepth 1 ! -name lost+found \
			-delete || failed=1

		boot_mesg -n " /var/ipfire/dhcp" ${NORMAL}
		cd /var/ipfire/dhcpc/ && find . -name "*.pid" -exec rm -f {} \; || failed=1
		cd /var/ipfire/dhcpc/ && find . -name "*.cache" -exec rm -f {} \; || failed=1
		cd /var/ipfire/dhcpc/ && find . -name "*.info" -exec rm -f {} \; || failed=1

		boot_mesg -n " /var/ipfire/red" ${NORMAL}
		cd /var/ipfire/red/ && find . -name active -exec rm -f {} \; || failed=1

		boot_mesg -n " /var/lock" ${NORMAL}
		cd /var/lock &&
		find . -type f ! -newer /proc -exec rm -f {} \; || failed=1

		boot_mesg -n " /var/log/updatexlrator" ${NORMAL}
		rm -f /var/log/updatexlrator/checkdeaddl.lck

		boot_mesg " /var/run" ${NORMAL}
		cd /var/run &&
		find . ! -type d ! -name utmp ! -newer /proc \
			-exec rm -f {} \; || failed=1
		> /var/run/utmp
		if grep -q '^utmp:' /etc/group ; then
			chmod 664 /var/run/utmp
			chgrp utmp /var/run/utmp
		fi

		(exit ${failed})
		evaluate_retval

		if egrep -qv '^(#|$)' /etc/sysconfig/createfiles 2>/dev/null; then
			boot_mesg "Creating files and directories..."
			create_files
			evaluate_retval
		fi
		;;
	*)
		echo "Usage: ${0} {start}"
		exit 1
		;;
esac
